package cn.lyjuan.pojoutils.genclass;

import cn.lyjuan.pojoutils.bean.ColumnBean;
import cn.lyjuan.pojoutils.bean.TableBean;

import java.sql.SQLException;
import java.util.List;

/**
 * Created by ly on 2014/11/23.
 */
public interface ITableInfo
{
    /**
     * 解析表信息，直接调用 {@code parseTableInfo} 与 {@code parseColumnInfo} 方法
     * @param tableBean
     *              表信息
     * @param cols
     *              字段信息
     * @return
     */
    void parseInfo(TableBean tableBean, List<ColumnBean> cols) throws SQLException;

    /**
     * 解析表信息，包含：<br />
     *      1. 表注释
     * @param tableBean
     */
    void parseTableInfo(TableBean tableBean, List<ColumnBean> cols) throws SQLException;

    /**
     * 解析字段信息，包含：<br />
     *      1. 字段注释
     *      2. 主键，自动增长
     *      3. 字段类型，默认值，是否可为空
     * @param tableBean
     */
    void parseColumnInfo(TableBean tableBean, List<ColumnBean> cols) throws SQLException;

    /**
     * 解析数据库字段类型属性，包含：<br />
     *      1. type
     *      2. typeName
     *      3. mybaitsJavaType
     *      4. mybatisJdbcType
     * @param tableBean
     * @param cols
     */
    void parseDBType(TableBean tableBean, List<ColumnBean> cols) throws SQLException;

    /**
     * 解析序列
     * @param tableBean
     * @param cols
     */
    void parseSequence(TableBean tableBean, List<ColumnBean> cols);
}
